"""
管理员功能接口
"""
import logging
import os
import datetime
from conf import settings
from db.db_handler import read, save, set_goods_info
from interface import user_interface
from lib.common import pretty_print

logger = logging.getLogger(__name__)


def admin_login_interface(username: str, password: str):
    """
    管理员登录接口
    :param username: 用户名
    :param password: 密码
    :return: 校验成功返回 用户字典；失败返回 None
    """
    # 调用登录接口
    user_dict = user_interface.login_interface(username, password, is_admin_login=True)
    # 如果用户不存在或密码错误
    if not user_dict:
        return
    # 是否为管理员
    if not user_dict['is_admin']:
        logger.warning(f"{username}非管理员，禁止使用该功能!")
        print(f"{username}非管理员，禁止使用该功能!")
        return

    logger.info(f"管理员{username}成功登录!")
    # 返回用户字典
    return user_dict


def list_all_user_interface(*args):
    """
    打印用户信息列表，默认只打印用户名，可传入用户字典中的其他key，返回所有用户名列表
    :param args: 可传入：balance 打印余额  locked 打印锁定状态
    :return: 用户名列表
    """
    # 通过用户文件列表获取用户名列表
    username_list = list(map(lambda x: x.split('.')[0], os.listdir(settings.USER_DIR)))
    # 获取所有用户数据
    all_user_list = [read(username) for username in username_list]
    # 标题列表
    title_list = ['用户名']
    for i in args:
        if i == 'balance': title_list.append('余额')
        if i == 'locked': title_list.append('锁定状态')
    # 数据列表
    data_list = []
    for user_dict in all_user_list:
        data = [user_dict['username']]
        for i in args:
            data.append(user_dict[i])
        data_list.append(data)
    # 打印美化表格
    pretty_print(title_list, data_list)
    # 返回用户名列表
    return username_list


def change_balance_interface(username: str, amount: float):
    """
    修改余额接口
    :param username: 用户名
    :param amount: 修改后的余额
    :return: None
    """
    user_dict = read(username)
    user_dict['balance'] = amount
    user_dict['flow'].append(f'{datetime.datetime.now()} 管理员修改{username}余额为{amount}')
    save(user_dict)
    logger.info(f"管理员修改{username}余额为{amount}")


def check_user_flow_interface(username: str):
    """查看用户流水接口"""
    from interface.bank_interface import check_flow_interface
    check_flow_interface(read(username))


def lock_user_interface(username: str):
    """锁定用户接口"""
    # 获取用户字典
    user_dict = read(username)
    # 反转用户的锁定状态
    user_dict['locked'] = not user_dict['locked']
    # 保存数据
    save(user_dict)
    # 打印提示
    if user_dict['locked']:
        print(f"用户{username}被锁定")
        logger.info(f"用户{username}被锁定")
    else:
        print(f"用户{username}已解锁")
        logger.info(f"用户{username}已解锁")
    # 返回锁定状态
    return user_dict['locked']


def inventory_management_interface(goods_info: dict, goods_name: str, goods_num: int):
    """
    库存管理接口
    :param goods_info: 商品字典
    :param goods_name: 商品名
    :param goods_num: 修改后的库存数量
    :return: None
    """
    goods_info[goods_name][1] = goods_num
    logger.info(f"商品{goods_name}的库存修改为{goods_num}")
    set_goods_info(goods_info)


def add_goods_interface(goods_info: dict, goods_name: str, goods_price: float, goods_num: int):
    """
    添加商品接口
    :param goods_info: 商品字典
    :param goods_name: 新增的商品名
    :param goods_price: 新增的商品价格
    :param goods_num: 新增的商品库存数量
    :return: None
    """
    goods_info[goods_name] = [goods_price, goods_num]  # 修改库存
    set_goods_info(goods_info)
    print(f"新增商品{goods_name} 单价{goods_price} 库存{goods_num}")
    logger.info(f"新增商品{goods_name} 单价{goods_price} 库存{goods_num}")


def delete_goods_interface(goods_info: dict, goods_name: str):
    """
    删除商品接口
    :param goods_info: 商品字典
    :param goods_name: 删除商品名称
    :return:
    """
    print(f"删除商品{goods_name} 单价{goods_info[goods_name][0]} 库存{goods_info[goods_name][1]}")
    logger.info(f"删除商品{goods_name} 单价{goods_info[goods_name][0]} 库存{goods_info[goods_name][1]}")
    goods_info.pop(goods_name)  # 删除商品
    set_goods_info(goods_info)  # 保存商品字典
